package com.hothead.api;

import bean.Employee;

import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import bean.PMF;

import com.hothead.bean.LocalInfo;
import com.hothead.bean.RouteInfo;

@Path("/api")
public class ServiceAPI {
	@Path("/set")
	@GET
	public void setEmployee() {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Employee e = new Employee("alfred", "Smith", new java.util.Date());
		try {
			pm.makePersistent(e);
			System.out.println("success");
		} finally {
			pm.close();
		}
		System.out.println("Failed");
	}

	@Path("/get")
	@GET
	@Produces("application/xml")
	public Employee getEmployee() {
		Query query = PMF.get().getPersistenceManager().newQuery(
				"SELECT FROM " + Employee.class.getName());
		List<Employee> list = (List<Employee>)query.execute();
		return list.get(0);
	}

	@Path("/search/{target}")
	@GET
	@Produces("application/xml")
	public List<Object> search(@PathParam("target") String target) {
		List<Object> result = null;
		if (target.toLowerCase().equals("local")) {
			// TODO : DAO를 사용하여 데이터 베이스에서 데이터를 조회해 올것
			// 객체화를 시킨 다음에
			// 리턴할 것
			// result =
		} else if (target.toLowerCase().equals("route")) {
			// TODO : DAO를 사용하여 데이터 베이스에서 데이터를 조회해 올것
			// 객체화를 시킨 다음에
			// 리턴할 것
			// result =
		} else {
			result = null;
		}
		return result;
	}

	/**
	 * 복수의 지역 정보를 리턴하는 인터페이스
	 * 
	 * @return
	 */
	@Path("/localinf")
	@GET
	@Consumes("application/xml")
	public List<LocalInfo> getLocalInfo() {
		List<LocalInfo> infos = new ArrayList<LocalInfo>();
		infos.add(new LocalInfo());
		infos.add(new LocalInfo());
		return infos;
	}

	/**
	 * 복수의 경로 정보를 리턴하는 인터페이스
	 * 
	 * @return
	 */
	@Path("/routeinf")
	@GET
	@Produces("application/xml")
	public List<RouteInfo> getRouteInfo() {
		List<RouteInfo> routeInfo = new ArrayList<RouteInfo>();
		routeInfo.add(new RouteInfo());
		routeInfo.add(new RouteInfo());
		return routeInfo;
	}

	/**
	 * 지역정보 업로드를 담당할 메서드
	 */
	@Path("/localinf")
	@POST
	@Consumes("application/xml")
	public void upLocalInfo(LocalInfo localInfo) {
		LocalInfo lInfo1 = localInfo;
		System.out.println("l;askjd;flkjal;sdjf");
	}

	/**
	 * 경로정보 업로드를 담당할 메서드 header에 content-type=application/xml로 반드시 표기해 줄것
	 */
	@Path("/routeinf")
	@POST
	@Consumes("application/xml")
	public void upRouteInfo(RouteInfo routeInfo) {
		RouteInfo rInfo1 = routeInfo;
		System.out.println(";lakj;dlfkja;sldfj");
	}
}
